# -*- coding: UTF-8 -*-


#类公开属性
#类公开方法

#类实例属性
#类实例方法

#类私有属性
#类私有方法


#__init__
#__class__
#__bases__  父类元组
#__str__ 类转化字符串


class Fly:
	
	#类公开属性
	m_property=123
	
	###类公开方法
	@classmethod
	def m_method(self):
		print '类开放方法'
		
	###类静态方法
	@staticmethod
	def static_method():
		print '类静态方法'

	#类初始后函数
	def __init__(self):
		
		self.dirrection='类实例属性'
		self.__priproperty='类私有属性'
		
		print self.m_property
		
	#类构造函数
	def __new__(self):
		print '类构造函数'
	
	#类实例方法
	def mymothod(self):
		self.m_property = 456
		print self.m_property
		
		self.__priproperty='类私有属性'
		self.__mymethod()
	
	#类私有方法
	def __mymethod(self):
		self.__priproperty='类私有属性'
		print self.__priproperty
		print '类私有方法'
		

if __name__ == '__main__':

	#类公开属性
	Fly.m_property = 123
	#类公开方法	
	Fly.m_method()
	#类静态方法
	Fly.static_method()
	

	fly = Fly()
	#类实例方法
	fly.mymothod()
	#类实例属性
	fly.dirrection = '类实例属性'
	
	#类私有方法
	#fly.__mymethod()

	#类私有属性
	fly.__priproperty = '类私有属性'
	
	
	
############################python内置方法#####################
# __init__(self,.....)    	初始化对象,在创建新对象前声明
# __del__(self)				释放对象,在对象被删除之前调用
# __new__(self,*args,**ked)	实例的生成操作
# __str__(self)				在使用print语句时被调用
# __delitem(self,key)		从字典中删除key对应的元素
# __setitem(self,key,value)	为字典中的key赋值
# __getitem(self,key)		获取序列的索引key对应的值，等价于seq[key]
# __len__(self)				在调用内联函数len()时被调用
# __cmp__(src,dst)			比较两个对象src和dst
# __getattr__(s,name)		获取属性的值
# __setattr__(s,name)		设置属性的值
# __delattr__(s,name)		删除name属性
# __gt__(self,other)		判断self对象是否大于other对象
# __lt__(self,other)		判断self对象是否小于other对象
# __ge__(self,other)		判断self对象是否大于或者等于other对象
# __le__(self,other)		判断self对象是否小于或者等于other对象
# __eq__(self,other)		判断self对象是否等于other对象
# __call__(self,*args)		把实例对象作为函数调用



#继承

class UniversityMember:
	def __init__(self,name,age):
		self.name = name
		self.age = age

	def getName(self):
		return self.name

	def getAge(self):
		return self.age

class Student(UniversityMember):
	
	def __init__(self, name,arg,sno,mark):
		super.__init__(self,name,age)
		self.sno = sno
		self.mark = mark
		#校验是否父子类
		print (issubclass(Student,UniversityMember))


	def getTno(self):
		return self.tno

	def getMark(self):
		return self.mark

class Teacher(UniversityMember):

	def __init__(self, arg,tno,salary):
		super.__init__(self,name,age)
		self.tno = tno
		self.salary = salary

	def getTno(self):
		return self.tno

	def getSalary(self):
		return self.salary


#多态
_metaclass_ = type
class Duck:
	def quack(self):
		print 'Quaaaaaaack!'
	def feathers(self):
		print 'then duck has white and gray feathers.'

class Person:
	def quack(self):
		print 'the person imitates a duck!'
	def feathers(self):
		print 'the person takes a feather from the ground and shows it.'
		
def in_the_forest(duck):
	duck.quack()
	duck.feathers()

def game():
	donald = Duck()
	john = Person()
	in_the_forest(donald)
	in_the_forest(duck)



###############get;set;####################
class C(object):
    def __init__(self):
        self._x = None

    @property
    def x(self):
        """I'm the 'x' property."""
        print "getter of x called"
        return self._x

    @x.setter
    def x(self, value):
        print "setter of x called"
        self._x = value

    @x.deleter
    def x(self):
        print "deleter of x called"
        del self._x
